package database

import (
	"fmt"
	nebulaorm "github.com/haysons/norm"
	"sync"
	"time"
	"tupu-go/config"
)

var (
	ormDB *nebulaorm.DB // 全局单例
	once  sync.Once     // 只初始化一次
)

// InitNebulaORM 在 main.go 的 main() 里调用一次即可
func InitNebulaORM(cfg config.NebulaConfig) error {
	var err error
	once.Do(func() {
		ormCfg := &nebulaorm.Config{
			Username:  cfg.User,
			Password:  cfg.Password,
			SpaceName: cfg.SpaceName,
			Addresses: []string{fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)},
			// 连接池参数
			MaxOpenConns: cfg.MaxConnections,
			ConnTimeout:  time.Duration(cfg.IdleTimeout) * time.Second,
			// 其他可选
			TimezoneName: "Asia/Shanghai",
		}
		ormDB, err = nebulaorm.Open(ormCfg)

	})
	fmt.Println("init nebula orm success", ormDB)
	return err
}

// GetNDB
// DB 返回全局 ORM 实例，任何地方直接链式调用
func GetNDB() *nebulaorm.DB {

	return ormDB
}

// Close 程序退出时调用
func Close() {
	if ormDB != nil {
		_ = ormDB.Close()
	}
}
